import BaseNode from '../core/BaseNode';
import Picker from './Picker';

/**
 * 从children中随机选取指定的去执行 
 */
export default abstract class Randomer extends Picker {


    between(min: number, max: number) {
        return Math.floor(Math.random() * (max - min + 1) + min);
    };

    /**
     * 选择下一个
     * 
     * @param array 数组
     * @param current 当前索引
     * @param length 数组长度
     * @param prev 上次选中的
     * @returns 本次选中的
     */
    protected pickNext(array: BaseNode[], current: number, length: number): BaseNode | null {
        // 判断遍历次数,已经超过array长度
        if (array.length === 0) return null
        // 判断循环次数大于长度,则返回
        if (current < 0 || current >= length) return null
        // 判断长度 === 1 ,无需随机 / 大于1 则可以随机
        const index = array.length === 1 ? 0 : this.between(0, array.length - 1)
        // 排除已选择的,并将排除的返回
        return array.splice(index, 1)[0];
    }
};
